<?php
/* -------------------------------------------------------------------------------------
* 	ID:						$Id: zones.php 135 2013-09-22 07:30:55Z phone.mueller@googlemail.com $
* 	Letzter Stand:			$Revision: 135 $
* 	zuletzt geaendert von:	$Author: siekiera $
* 	Datum:					$Date: 2013-09-22 07:30:55 +0000 (Sun, 22 Sep 2013) $
*
* 	SEO:mercari by Siekiera Media
* 	http://www.seo-mercari.de
*
* 	Copyright (c) since 2011 SEO:mercari
* --------------------------------------------------------------------------------------
* 	based on:
* 	(c) 2000-2001 The Exchange Project  (earlier name of osCommerce)
* 	(c) 2002-2003 osCommerce - www.oscommerce.com
* 	(c) 2003     nextcommerce - www.nextcommerce.org
* 	(c) 2005     xt:Commerce - www.xt-commerce.com
*
* 	Released under the GNU General Public License
* ----------------------------------------------------------------------------------- */

class zones {
    var $code, $title, $description, $enabled, $num_zones, $db;

    function __construct() {
		global $db;
		$this->code = 'zones';
		$this->title = MODULE_SHIPPING_ZONES_TEXT_TITLE;
		$this->description = MODULE_SHIPPING_ZONES_TEXT_DESCRIPTION;
		$this->sort_order = MODULE_SHIPPING_ZONES_SORT_ORDER;
		$this->icon = '';
		$this->tax_class = MODULE_SHIPPING_ZONES_TAX_CLASS;
		$this->enabled = ((MODULE_SHIPPING_ZONES_STATUS == 'True') ? true : false);
		$this->db = $db;
		$this->num_zones = 8;
    }

    function quote($method = '') {      
      	if(!free_shipping())
			return;
		
		global $order, $shipping_weight;
		
		$dest_country = $order->delivery['country']['iso_code_2'];
		$dest_zone = 0;
		$error = false;
		
		for ($i=1; $i<=$this->num_zones; $i++) {
			$countries_table = constant('MODULE_SHIPPING_ZONES_COUNTRIES_'.$i);
			$country_zones = explode(",", $countries_table);
			if (in_array($dest_country, $country_zones)) {
				$dest_zone = $i;
		  		break;
			}
		}
		
		if ($dest_zone == 0)
			$error = true;
		else {
			$shipping = -1;
			$zones_cost = constant('MODULE_SHIPPING_ZONES_COST_'.$dest_zone);
			
			$zones_table = preg_split("/[:,]/", $zones_cost);
			$size = sizeof($zones_table);
			for ($i=0; $i<$size; $i+=2) {
				if ($shipping_weight <= $zones_table[$i]) {
					$shipping = $zones_table[$i+1];
					$shipping_method = MODULE_SHIPPING_ZONES_TEXT_WAY.' '.$dest_country.' : '.$shipping_weight.' '.MODULE_SHIPPING_ZONES_TEXT_UNITS;
					break;
				}
			}
			
			if ($shipping == -1) {
				$shipping_cost = 0;
				$shipping_method = MODULE_SHIPPING_ZONES_UNDEFINED_RATE;
			} else
				$shipping_cost = ($shipping + constant('MODULE_SHIPPING_ZONES_HANDLING_'.$dest_zone));
		}
		
		$this->quotes = array('id' => $this->code,
		                    'module' => MODULE_SHIPPING_ZONES_TEXT_TITLE,
		                    'methods' => array(array('id' => $this->code,
		                                             'title' => $shipping_method,
		                                             'cost' => $shipping_cost)));
		
		if ($this->tax_class > 0)
			$this->quotes['tax'] = get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
		
		if (not_null($this->icon)) 
			$this->quotes['icon'] = image($this->icon, $this->title);
		
		if ($error == true) 
			$this->quotes['error'] = MODULE_SHIPPING_ZONES_INVALID_ZONE;
		
		return $this->quotes;
    }

	function check() {
		if (!isset($this->_check)) {
			$check = $this->db->db_query("SELECT configuration_value FROM ".TABLE_CONFIGURATION." WHERE configuration_key = 'MODULE_SHIPPING_ZONES_STATUS'");
			$this->_check = $check->_numOfRows;
		}
		return $this->_check;
	}

    function install() {
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." (configuration_key, configuration_value, configuration_group_id, sort_order, set_function, date_added) VALUES ('MODULE_SHIPPING_ZONES_STATUS', 'True', '6', '0', 'cfg_SELECT_option(array(\'True\', \'False\'), ', now())");
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." (configuration_key, configuration_value, configuration_group_id, sort_order, date_added) VALUES ('MODULE_SHIPPING_ZONES_ALLOWED', '', '6', '0', now())");
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." (configuration_key, configuration_value, configuration_group_id, sort_order, use_function, set_function, date_added) VALUES ('MODULE_SHIPPING_ZONES_TAX_CLASS', '0', '6', '0', 'get_tax_class_title', 'cfg_pull_down_tax_classes(', now())");
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." (configuration_key, configuration_value, configuration_group_id, sort_order, date_added) VALUES ('MODULE_SHIPPING_ZONES_SORT_ORDER', '0', '6', '0', now())");
		for ($i = 1; $i <= $this->num_zones; $i++) {
			$default_countries = '';
			if ($i == 1)
				$default_countries = 'DE';

			$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." (configuration_key, configuration_value, configuration_group_id, sort_order, date_added) VALUES ('MODULE_SHIPPING_ZONES_COUNTRIES_".$i ."', '".$default_countries."', '6', '0', now())");
			$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." (configuration_key, configuration_value, configuration_group_id, sort_order, date_added) VALUES ('MODULE_SHIPPING_ZONES_COST_".$i ."', '3:8.50,7:10.50,99:20.00', '6', '0', now())");
			$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." (configuration_key, configuration_value, configuration_group_id, sort_order, date_added) VALUES ('MODULE_SHIPPING_ZONES_HANDLING_".$i."', '0', '6', '0', now())");
		}
    }

    function remove() {
		$this->db->db_query("DELETE FROM ".TABLE_CONFIGURATION." WHERE configuration_key IN ('".implode("', '", $this->keys())."')");
    }

	function keys() {
		$keys = array('MODULE_SHIPPING_ZONES_STATUS',
						'MODULE_SHIPPING_ZONES_ALLOWED',
						'MODULE_SHIPPING_ZONES_TAX_CLASS',
						'MODULE_SHIPPING_ZONES_SORT_ORDER');
		
		for ($i=1; $i<=$this->num_zones; $i++) {
			$keys[] = 'MODULE_SHIPPING_ZONES_COUNTRIES_'.$i;
			$keys[] = 'MODULE_SHIPPING_ZONES_COST_'.$i;
			$keys[] = 'MODULE_SHIPPING_ZONES_HANDLING_'.$i;
		}
		
		return $keys;
	}
}
?>